#pragma once

//////////////////////////////////////////////////////////////////////////
//
// Structure that holds static global data 
// used through all the application
//
//////////////////////////////////////////////////////////////////////////

#include "utils/Camera.h"

#ifndef _WINDEF_
struct HINSTANCE__; // Forward or never
typedef HINSTANCE__* HINSTANCE;
#endif

struct Direct3DData;
struct MouseProperties;
struct PipelineStates;
class ShadersManager;
class ShaderResources;
struct SettingsManager;
struct WindowData;

struct Globals {
	static SettingsManager* gSettingsManager;
    static HINSTANCE gApp;
    static WindowData* gWindowData;
    static Direct3DData* gD3D;
    static ShadersManager* gShaders;
    static ShaderResources* gResources;
    static PipelineStates* gPipeline;
    static Camera gCamera;
	static MouseProperties* mMouseProperties;
	static bool gAppIsClosing;
	static bool gExecCS; // Execute compute shader or not.

	static void init();
	static void destroy();

private:
    Globals();
    Globals(const Globals& src);
    const Globals& operator=(const Globals& src);
};

